Расстановка ферзей

Реализация алгоритма нахождения расстановки 8 ферзей на шахматной доске, которые не бьют друг друга.

Задача

См. Задача о восьми ферзях.

Реализация

Реализован алгоритм со страницы Benchmark 8 ферзей (альтернативная ссылка).

Отличия от приведённой там программы:

Для начала расчёта нажмите В/О, С/П. После остановки будет 0. – найдена очередная, в данном случае первая, расстановка.

С учётом того, что все ферзи должны быть на разных вертикалях, то в регистрах R1…R8 будут записаны номера горизонталей для соответствующего ферзя.

Для следующей расстановки нажмите С/П.

Значения первой расстановки для контроля: 8, 4, 1, 3, 6, 2, 7, 5. Или в шахматной нотации: Фa8, Фb4, Фc1, Фd3, Фe6, Фf2, Фg7, Фh5. Как ни странно, первая расстановка получается дольше всех. Остальные вычисляются быстрее, но с разной скоростью. Ещё долго думает в конце, после 92-й расстановки, убеждаясь, что больше подходящих нет.

Когда все расстановки будут сделаны ПМК вместо нуля отобразит -1.

Распределение регистров

R0 Номер горизонтали для нового ферзя.
R1…R8 Номера горизонталей ферзей 1…8.
R9 Сколько ферзей уже удалось расставить.

В процессе работы ПМК сам инициализирует все необходимые регистры, поэтому их начальное значение до запуска программы не играет роли.

Текст программы

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  Cx x→П9 Fx=0 14 П→x9 1 + x→П9 9
 10 |  Fx≠0 46 8 Кx→П9 П→x9 x→П0 1 П→x0 Fx<0
 20 |  02 КП→x9 КП→x0 Fx≠0 34 Fx2 F П→x9
 30 |  П→x0 + Fx=0 16 КП→x9 1 Кx→П9 Fx=0 14
 40 |  П→x9 1 x→П9 Fx<0 34 С/П БП 40

Измерения скорости

Если рассматривать задачу, как измеритель скорости, то первая расстановка получается через такой интервал:

Программа Операционка, оборудование Результат
Расширенный эмулятор МК 61/54 Android 13, CPU MTK G95, 8 ядер 2.05 ГГц 55 сек.
Эмулятор МК-61 Windows 7, Яндекс браузер 24.10.3.845, CPU Intel i5-2300, 4 ядра, 2.80 ГГц 99 сек.

Это данные при включенном ускорении в этих эмуляторах.